perm filename PART1[DOC,BGB] blob sn#093410 filedate 1974-03-24 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00035 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00004 00002	STANFORD ARTIFICIAL INTELLIGENCE LABORATORY                MARCH 1974
C00007 00003	0.0  CONTENTS.
C00009 00004	1.0  PRIMER.
C00013 00005	
C00018 00006	
C00020 00007	
C00024 00008	
C00029 00009	
C00034 00010	2.0  EXAMPLES.
C00038 00011	The Platonic Solids.
C00039 00012	2.7  Pulgas Water Temple.
C00040 00013	3.0  GEOMETRIC COMMANDS
C00042 00014	   3.1	EUCLIDEAN TRANSFORMATIONS.
C00046 00015	   3.2	STRENGTHS OF TRANSFORMATION.
C00049 00016	   3.3	EUCLIDEAN SWITCHES.
C00054 00017	   3.4	THE ITERATION COUNTER.
C00057 00018	4.0  TOPOLOGICAL COMMANDS.
C00060 00019	   4.1	EASY CREATIONS.
C00063 00020	   4.2	COPY, KILL AND DUAL.
C00066 00021	   4.3	SWEEP COMMANDS.
C00069 00022	   4.4	THE EULER COMMANDS.
C00073 00023	   4.5	BODY INTERSECTION COMMANDS.
C00077 00024	   4.6	CUT COMMANDS.
C00079 00025	5.0  INPUT/OUTPUT COMMANDS.
C00083 00026	6.0  EDITOR CONTROL COMMANDS.
C00085 00027	   6.1	PROGRAM CONTROL.
C00089 00028	   6.3  BODY NAMING AND RETRIEVING.
C00093 00029	   6.5  LINK FOLLOWING COMMANDS.
C00099 00030	7.0  DISPLAY CONTROL COMMANDS.
C00102 00031	   7.1  STATUS DISPLAY.
C00106 00032	   7.2	HELP DISPLAY.
C00109 00033	   7.4	EDGE DISPLAY BITS.
C00113 00034	8.0  FILE FORMATS.
C00118 00035	9.0  COMMAND SUMMARY BY LEXICAL ORDER.
C00128 ENDMK
C⊗;
STANFORD ARTIFICIAL INTELLIGENCE LABORATORY                MARCH 1974
SAILON NUMBER 68.		                 GEOMED DOCUMENTATION
MEMO AIM-XXX
COMPUTER SCIENCE DEPARTMENT REPORT NO. CS-XXX



                     GEOMED  -  GEOMETRIC EDITOR.

                          Bruce g. Baumgart





ABSTRACT: 

	GEOMED is  a system  for doing  3-D geometric modeling;  used
from  a keyboard,  it is  an interactive drawing  program; used  as a
package of  SAIL or  LISP accessible  subroutines, it  is a  graphics
language. With GEOMED,  arbitrary  polyhedra can be contructed; moved
about  and viewed  in perspective with  hidden lines  eliminated.  In
addition to polyhedra, camera  and image models are provided  so that
simulators  relevant  to  computer  vision,  problem  solving,    and
animation may be constructed.

















---------------------------------------------------------------------
This  research  was  supported  in  part  by  the  Advanced  Research
Projects  Agency of  the  Office of  the Secretary  of  Defense under
Contract DAHC15-73-C-0435

The views and  conclusions contained  in this document  are those  of
the author and should not  be interpreted as necessarily representing
the  official policies, either expressed or  implied, of the Advanced
Research Projects Agency or the United States Government.
---------------------------------------------------------------------
0.0  CONTENTS.


PART I  -  GEOMED AS AN INTERACTIVE DRAWING PROGRAM.

	1.0	PRIMER.
	2.0	EXAMPLES.
	3.0	GEOMETRIC COMMANDS.
	4.0	TOPOLOGICAL COMMANDS.
	5.0	INPUT/OUTPUT COMMANDS.
	6.0	EDITOR CONTROL COMMANDS.
	7.0	DISPLAY CONTROL COMMANDS.
	8.0	FILE FORMATS.
 	9.0	COMMAND SUMMARY BY LEXICAL ORDER.

PART II - GEOMED AS A SAIL OR LISP ACCESSIBLE GRAPHICS COMMAND LANGUAGE.

	1.0	A SIMPLE EXAMPLE.
	2.0	LINK AND DATUM ACCESSING.
	3.0	WINGED EDGE PRIMITIVES.
	4.0	EULER MAKE PRIMITIVES.
	5.0	EULER KILL PRIMITIVES.
	6.0	EASY POLYHEDRON ROUTINES.
	7.0	EUCLIDEAN TRANSFORMATIONS.
	8.0	GEOMETRIC MEASURE ROUTINES.
	9.0	BODY INTERSECTION AND CUTTING.
       10.0	IMAGE FORMATION ROUTINES.
       11.0	INPUT/OUTPUT ROUTINES.
       12.0	AUXILLARY ROUTINES: III DISPLAY AND ARITHMETIC.

PART III - INTERNAL GEOMED DOCUMENTATION.

	1.0	DESCRIPTION OF SOURCE FILES.
	2.0	HOW TO ASSEMBLE AND LOAD GEOMED.
	3.0	HOW TO ASSEMBLE AND LOAD GEOMES.
	4.0	HOW TO ASSEMBLE AND LOAD GEOMEL.
	5.0	SUBROUTINE CALLING CONVENTION.
1.0  PRIMER.

1.1  Purpose.

	GEOMED is for  making drawings,  synthetic video  images, and
3-D geometric models for the sake of computer vision.

1.2  Running GEOMED.

	The system  copy of GEOMED  is started  by typing "R  GEOMED"
carriage return at a III display console.  The program will display a
rectangle,   type an asterisk  and await  single character  commands.
Typing carriage returns will yield more asterisks showing that GEOMED
is alive and listening.

1.3  Instant Cube.

	Typing the character  "∞", calls a  macro that makes  a cube.
Adjust the pots on the III so that the cube looks right.

1.4  Translation.

   Type the character ":" to move the cube right  (positive x axis).
   Type the character ";" to move the cube left   (negative x axis).
   Type the character ")" to move the cube up     (positive y axis).
   Type the character "(" to move the cube down   (negative y axis).
   Type the character "*" to move the cube nearer (positive z axis).
   Type the character "-" to move the cube away   (negative z axis).

	Clearly  these command  characters  are not  mnemonics,  they
were  chosen  because  they  do  not  require  the  TOP key  and  are
conveniently grouped in pairs under one's right hand.


1.5  Strength of Translation.

	The distance the cube is moved on  each command is called the
strength  of translation or TDEL.  The value of TDEL  is displayed in
the upper right corner of the  screen and is initially one foot.  The
strength of translation is halved by typing the command character "/"
or doubled by typing "\".


1.6  World Frame of Reference.

	The direction the  cube moved was  with respect to  the world
frame  of reference which is  a right handed coordinate  system.  The
initial camera is  positioned looking down  the Z  axis at the  world
origin. The  world origin is  in the center  of the display  screen a
simulated sixteen feet away; and the positive world X axis is to your
right; and the positive world Y axis is upwards.


1.7  Control, Meta, and Meta-Control Keys.

	Notice that the Stanford A.I. keyboard  has four "shift" keys
labeled SHIFT, TOP,  META & CONTROL. SHIFT only determines whether an
alphabetic letters is upper or lower case; GEOMED converts lower case
letters into upper so  that the SHIFT key has no  effect. The TOP key
allows  two ASCII character  codes to  be on each  physical key, this
doubling up on  the physical  keys is not  important to GEOMED  since
"TOP-E"  can always  be  referred to  as  "@".   Finally,   of  great
importance, the CONTROL and META keys add two extra bits to the 7-bit
ASCII code,  so that  a 9-bit character is formed.   In this document
the characters "α",  "β" and "ε" will be used as prefix abbreviations
for  CONTROL,    META   and  META-CONTROL  keying  of  a   character.
Furthermore,   the command scanner  accepts the characters "α",   "β"
and "ε" as prefix modifiers that will add the appropriate control and
meta bits to the next character typed.

1.8  Question Mark "?" Prefix.

	Typing  the  question  mark  charcter  "?"  followed  by  any
character will type a one line reminder  of what commands are invoked
by that character.

1.9  Rotation.

	The  rotation  command  characters  are  the  same   as   for
translation  except  you must hold the CONTROL key down or prefix the
command with an "α". Try rotating the instant cube about  the  X-axis
with  "α:".  The positive direction of rotation is counter-clockwise.
The negative direction of rotation is clockwise.

1.10 Strength of Rotation.

	The strength of rotation is named RDEL,  the value of RDEL is
displayed  in  two formats  in the  upper  right hand  corner  of the
screen: as a  pi fraction and in  degrees,  minutes,   seconds.   The
initial value of RDEL is π/4,  45 degrees.  Analogous to translation,
the  strength  of rotation  is  halved or  doubled by  "α/"  and "α\"
respectively.

1.11 Rotation Default.

	Since a sequence of rotations is quite common, there is a way
to  make the CTRL key  be sticky. The  usual Euclidean transformation
default is translation world frame; but after typing the  "@" command
character, the Euclidean default is rotation world frame. Translation
default  is  restored by  typing  "!".   The state  of  the Euclidean
transformation default is also  displayed in the status in  the upper
right hand corner of the screen. (The "≡" command disables the status
display, "≡" toggles).


1.12 The Extended Command Scanner.

	X-commands are executed  by typing "X" followed by  the first
three letters of a mnemonic (further letters are ignored) followed by
any necessary arguments.  The command is terminated by a  RETURN. The
arguments  may  be separated  by  any  reasonible delimiters:  space,
comma,   etc.  The following three "X" commands provide easy creation
of simple polyhedra:

	X CUBE <DX width>,<DY height>,<DZ depth>
	X BALL <radius>,<M longitudes>,<N latitudes>
	X CYLN <radius>,<N sides>,<DZ length>

	The CUBE command  makes a right rectangular prism  with width
height and depth  as given.  The BALL command makes a polyhedron that
approximates a  sphere. The  CYLN command  makes a  right prism  that
approximates a circular cylinder.


1.13  The Stack.

	GEOMED commands  take their  arguments from  and leave  their
results in a push  down stack of bodies,  faces,  edges and vertices.
The contents of the stack are displayed on the left hand side  of the
III screen.   Having made a  cube, you will  have a B1 in  the stack;
making  a second cube will  push a B2 into the  stack. To retrieve B1
use the  "↑" stack  pop or  the "α↑" stack  rotate up  or "α↓"  stack
rotate down  or "↔" the  swap top of  stack command. The  "↓" command
pushs the stack down and  places in the new  top the entity that  was
previously  top  of  stack.

1.14 The Face, Edge and Vertex Rings.

	A polyhedron consists  of three circular double  linked lists
(called rings); there is  a ring of faces, a ring of edges and a ring
of vertices. The head of each ring is the body node. The rings can be
traveled by  using the commands "<"  and ">" to go  forwards and back
thru  the face ring, the commands "≤" and  "≥" for the edge ring, and
the commands  "∨" and "∧"  for the  vertex ring.  Notice that when  a
face,  edge  or  vertex  node   is  in  the  top  of  the  stack  the
corresponding entity is intensified in the drawing. 

1.15  Hidden Line Elimination.

	Hit the ALT-MODE  key in order  to see your drawing  with its
hidden lines eliminated.  To stay in hidden line display mode use the
"_" underbar command;  the "β_" returns the  display mode default  to
display all the lines. The hidden line eliminator, named OCCULT, does
not  apreciate overlapping  polyhedra or  concave faces; and  for the
sake of  speed it  does not  check for these  cases. The  faces of  a
polyhedra can be forced convex  by applying the "$" command to a body
or a face.

1.16  Parts Tree Structure - The Attach and Detach Commands.

	Each  body  represents   a  single  simply   connected  Euler
polyhedron of faces, edges and vertices. The parts' tree commands "A"
ATTACH and and "D" DETACH, allow  bodies to be connected into a  tree
structure without affecting  their faces, edges or  vertices. The "A"
attach command  links the body in the top of the stack to the body in
the second  stack position  as a  sub-part  (or child).   The  detach
command unlinks  a body from  its parent. Certain  operations such as
the  Euclidean  transformations   apply  to  a   body  and  all   its
descendents. The  section on link  following describes how  the parts
tree may  be traveled using the  "∩" DAD link, "∪"  SON link, "⊂" BRO
link and "⊃" SIS link commands.

1.17  Making a Cube Explicitly.

	After "∞" and  "X CUBE", a third way  to draw a cube  will be
given to illustrate  the primitive topology commands. Starting with a
fresh copy of GEOMED,  type the command letters in the  second column
to get the advertised results:

1.	V	Vertex body creation.
2.	:)	Position the vertex into the first quadrant.
3.	S;;	Make an edge and vertex and move left.
4.	S((	Edge vertex down.
5.	S::	Edge vertex right.
6.	J↑	Join the first and last vertices of the wire.
7.	*	Pull the face lamina towards you.
8.	S	Sweep the square face into a very thin solid.
9.	--↑	Move the face away from you giving the cube depth.
10.	@/):!	Rotate the cube to a more familiar position.

Three commands that have not been mentioned yet are:

	"V"	Vertex Body Creation.
	"S"	Sweep.
	"J"	Join two vertices with a new edge.

	The "V"  command takes  no arguments  and pushs  a brand  new
body,    face and  vertex  into  the stack.    This  degenerate point
polyhedron satisfies  the  Euler equation  F-E+V=2 (1-0+1=2)  and  is
always placed at the world origin.  The first three sweep commands in
the  example, sweep  a vertex  polyhedron into  a wire  polyhedron by
adding a new vertex  and a new edge; incidentally  preserving Euler's
equation  as do all  GEOMED commands.  The wire-sweep takes  a Vertex
argument, and returns  the new vertex.  The new vertex  has the  same
locus as the argument vertex. After three sides of a square have been
formed,   the "J" command creates  a new face and  a new edge between
the first and last  vertex of the wire face.   The wire-join case  of
the "J" command takes a vertex  argument and identifies it as the end
of  a wire and knows enough  to fetch the other  end of that wire, as
its second argument.


1.18  Text Commands of GEOMED 1973.

	Towards the end  of 1973, text  nodes and text  commands were
added  to GEOMMD  to demonstrate its  potential value  for mechanical
drawing.   This work  was  primarily done  by Tovar  Mock,   and  the
resulting alternate version  of GEOMED is available on  the system as
the program named "G".

	Text  nodes were  created  (or edited)  by  applying the  "T"
command  with a vertex in  the top of  stack close to  where the text
label is desired.  The header of a text node list is called  a Y-node
and can be reached from a text node by the "←" command; Y-nodes carry
their  own  3-D space  locus  and so  can  be moved  about  using the
Euclidean transformation. The resulting data structures could only be
save and restored by means  of the "εO" and "εI" dump and restore D3D
file. A kind  of I/O that  doesn't exist in  present GEOMED. The  "T"
command, accepts text by  means of an editor resembling  the system's
editors  TV  and E;  and using  the  system line  edit  commands. The
additional line edit mode commands are:

	<CR>	Forward 1 line
	<VT>	Backward 1 line

	αε>	Forward 4 lines
	αε<	Backward 4 lines
	αε≥	Forward 16 lines
	αε≤	Backward 16 lines

	εD	Delete a line
	εI	Enter line insert mode
	αZ	Concatenate next line with current line

	αεE	Return to GEOMED
	αεV	Update display
	αε/	Shrink III character size.
	αε\	Expand III character size.

	The best way to get a labeled drawing into hardcopy is to "P"
plot is out of  G into a plot file, ".PLT"; and then to use PLTVEC to
output the drawing on  the Cal Comp Plotter or  to use XAP to  output
the drawing to the XGP, Xerox Graphics Printer. See section 5.2 below
for details on how to make hardcopy drawings.
2.0  EXAMPLES.

	The  examples can  be  used as  exercises  in two  ways:  the
energetic reader  can glance at the figures  and attempt to reproduce
the results on his own; the  casual reader can copy the answers  into
the computer and follow the action a  step at a time. In either event
the  reader should  be looking  ahead into  sections 3 through  7 for
commands that have not been explained in the primer.

2.1  Jack.
2.2  Torus.
2.3  Soma Cubes.
2.4  The Platonic Solids.
2.5  Knot.
2.6  Wrench.
2.7  Pulgas water temple.
2.8  Room Interior.
2.9  Outdoors scene.
2.10  Stereo pairs.
2.11  Video Synthesis.
---------------------------------------------------------------------
2.1.1	Jack using face frame of reference.

	XCUB 0.5 0.5 0.5
	FF >S* >S* >S* >S* >S* >S* B

2.2.1	Torus.

	V:@		First Vertex.
	S*S*S*		Seven more vertices.
	S*S*S*S*
	J↑		Form Lamina.
	!\\:		Position the lamina.
	@S)S)S)S)	Sweep the face around the Y-axis.
	S)S)S)S)
	↓>G↑		Glue the ends of the torus together.

2.2.2	Torus using iterated sweeps.

	V:7@S*J		Make lamina.
	!↑8/:\@S)	Sweep lamina into ring.
	↓>G↑!		Glue the ends.

2.3	Soma cubes

	FFXCUB 1 1 1	Face frame & Core cube.
	<S*<<<S*<S*	Three face sweeps.
	BNSOMA7		Name it.

	FFXCUB 1 1 1
	>>S*
	>>>>S*
	↓≥.+↑S*
	BNSOMA6

	FFXCUB 1 1 1
	>S* >S* >S*
	BNSOMA3

	FFXCUB 1 1 1
	<S* <S*
	↓≥.+↑ S*
	BNSOMA4

	FFXCUB 1 1 1
	>S* >>S*
	BNSOMA1
The Platonic Solids.

Regular Tetrahedron

	XCUB 1 1 1
	∧↓∧∧↓B ∨↓∨∨	Push opposing vertices into the stack,
	SK↑SK↑SK↑KB	Lop off the opposing vertices.

Another Regular Tetrahedron

	XCYL 6 3 9	Three sided cylinder
	>KB		Pyramid one of the ends.

Regular Octahedron

	XCUB 1 1 1
	βD		Face-Vertex Dual of a cube
2.7  Pulgas Water Temple.

	V:λ5			Foundation of temple.
	S:λ0.2
	S)S;;S)S;;S)Sλ3		Jaggies forming steps.
	;↑π40'
	8@S)R↑¬λ3.61		Sweep out a solid of rotation.
	!(

	!Vλ0.6
	:S)))S;;S(((J		Make rectangular lamina
	↑λ3.5
	:π40'
	9@S)↓>G↑/)		Sweep lamina to form top of the temple.
	!λ2.72
	)

	XCYL 0.5 9 6		Make column,
	@9:!λ3.5		position column.
	>Aβ9β(<:π20'		Taper the top of the column.
	Q@)\
	C)C)C)C)		Make eight copies of the column,
	C)C)C)C)

3.0  GEOMETRIC COMMANDS

   3.1	EUCLIDEAN TRANSFORMATION KEYS.

	Translation, α Rotation,  β Dilation, ε Reflection.
	";" Transform Minus X-Axis.	":" ...Plus X-Axis.	
	"(" Transform Minus Y-Axis.	")" ...Plus Y-Axis.	
	"-" Transform Minus Z-Axis.	"*" ...Plus Z-Axis.	
	"!" Translation Default.      "@" Rotation Default.

   3.2	STRENGTHS OF TRANSFORMATION.

      3.2.1	"/"	Halve a Transformation Strength.
		"\"	Double a Transformation Strength.
      3.2.2  "λ<expr>"	Set Translation Strength, TDEL.
	     "π<expr>"	Set Rotation Strength, RDEL.
	     "%<expr>"	Set Dilation Strength, DDEL.
      3.2.3  "<digit>"	Set Transform Strength Immediate.

   3.3	EUCLIDEAN SWITCHES.

      3.3.1	 "F"	Step Frame Switch Forwards.
		"βF"	Step Frame Switch Backwards.
      3.3.2	 "Q"	Toggle Frame Origin Switch.
      3.3.3	"βA"	Step Axis Counter.
      3.3.4	 "∀"	Enable All Body Motions.
		"α∀"	Disable Frame  Motion.
		"β∀"	Disable Vertex Motion.
		"ε∀"	Disable Parts  Motion.

   3.4	THE ITERATION COUNTER.

	"<digit>"	Accumulate Iteration Count.
	"<return>"	Reset Iteration Count to Zero.

   3.5	DIRECT EUCLIDEAN COMMANDS.

      3.5.1	"U"	Unmove a Body.
      3.5.2	"X PLACE <X> <Y> <Z>"
      3.5.3	"X ORIENT <PAN> <TILT> <SWING>"
   3.1	EUCLIDEAN TRANSFORMATIONS.

	Translation, α Rotation,  β Dilation, ε Reflection.
	";" Transform Minus X-Axis.	":" ...Plus X-Axis.	
	"(" Transform Minus Y-Axis.	")" ...Plus Y-Axis.	
	"-" Transform Minus Z-Axis.	"*" ...Plus Z-Axis.	
	"!" Translation Default.      "@" Rotation Default.

	The  Euclidean  geometric  transformations  are  translation,
rotation, dilation and reflection. The entity in the top of the stack
is transformed by typing one of the six characters: colon, semicolon,
left parenthesis,   right parenthesis,  minus sign or  asterisk.  The
characters  colon,   left  parenthesis and  minus sign  transform the
object in the  negative direction  with respect to  the X-axis,   the
Y-axis and  the Z-axis respectively. The  characters semicolon, right
parenthesis  and  asterisk  transform  the  object  in  the  negative
direction with  respect  to the  X-axis, the  Y-axis  and the  Z-axis
respectively. The particular transformation is selected by keying the
control  bits:  none,     control,    meta  and  meta-control   which
respectively select  translation, rotation, dilation  and reflection.
Finally, the no control bits case can be forced to be rotation by the
"@" rotation default command,  or translation by  the "!" translation
default command.

	Translation  moves  the  top  entity  in  the  stack  in  the
direction specified  by  one  unit  of  translation  strength,  TDEL.
Rotation rotates the entity  about the axis specified by  one unit of
rotational  strength, RDEL. Positive rotations  are counter clockwise
and negative  rotations are  clockwise.

	Dilations  and  reflections  refer  to  a  three  axis  count
selector.  State 1  causes dilation  (reflection) to  be done  on the
specified axis,  dilation state 2 causes dilation (reflection) on the
two axes not indicated,  and  state 3 causes dilation (relfection) on
all the axes. The axis count selector is advanced by typing "βA". The
state of the selector is displayed as a digit 1,  2  or 3 just to the
right of the  dilation strength's per cent sign  in the editor status
display at the upper right of the III screen.

	When the  dilation  strength,  DDEL,  is  less  than  100%  a
positive dilation  will scale  the entity  by 1/DDEL  and a  negative
dilation will scale the entity by DDEL. Positive and negative keyings
make no difference in the execution of a reflection.
   3.2	STRENGTHS OF TRANSFORMATION.

3.2.1	"/"	Halve a Transformation Strength.
	"\"	Double a Transformation Strength.

	The strength of  a Euclidean transformation can be  halved or
doubled by keying  the transform's control bits and by striking slash
or back slash respectively.

3.2.2	"λ<real expression>"	Set Translation Strength, TDEL.
	"π<real expression>"	Set Rotation Strength, RDEL.
	"%<real expression>"	Set Dilation Strength, DDEL.

	The strengths of the Euclidean transformations can be entered
numerically  by typing  "λ",  "π" or  "%" followed  by  an arithmetic
expression of numerical constants. The simple expression  scanner can
take  "+", "-",  "*", "/"  and  parenthesis in  the usual  precedence
order;  the  scanner  also  evaluates  the  pi  character,  "π",   to
3.1415927; numbers suffixed with  the inch mark double quote  """ are
divided by twelve;  number suffixed with a left  single quote "`" are
multiplied  by  1.745329E-2  which  tends  to  convert  degrees  into
radians.

3.2.3	"<digits>"	Set Transform Strength Immediate.

	The strength  of  a Euclidean  transformation can  be set  by
keying the Transform's control bits and by striking a digit from zero
to nine. Keying "ε<digit>" sets the strength of translation;  a digit
without meta-control  bits contributes to  the iteration count.   For
Translation: "ε0"  sets TDEL to 1/16 of a foot, "ε4" sets TDEL to one
Foot,  and "ε9" sets TDEL to 32 Feet.  That is  ε<digit> sets TDEL to
2.0↑(<digit>-4) feet.  For Rotation: "α9" sets RDEL to π/2, "α8" sets
RDEL to π/4, and so  on. For Dilation: "β1" sets  DDEL to 10%,   "β2"
sets DDEL to 20% and so on.
   3.3	EUCLIDEAN SWITCHES.

3.3.1	 "F"	Step frame switch forwards.
	"βF"	Step frame switch backwards.


	There are four frames of reference:  world frame, body frame,
relative frame and camera frame. The world frame is that in which all
coordinates are stored; the world  frame is the natural direct  frame
of reference,   all the other  frames are represented in  world frame
coordinates  by a frame  node which contains the  origin location and
axes orientation of secondary  frames.  In particular, each  body and
camera has a frame node,  which determine a camera or a body frame of
reference that translates and rotates when Euclidean  transformations
are applied  to that  body or camera.  The relative  frame mode is  a
catch all; when a body is in the top of the stack, its relative frame
is that of the body of which it is a part; when a face is  in the top
of the stack, its relative frame  is a special face frame with Z-axis
parallel to the face's outward pointing normal. The "F" command steps
the frame  switch selector  forwards,   "βF" steps  the frame  switch
selector  backwards.   The  state  of the  frame  switch selector  is
displayed in the status in the upper right of the III screen.

3.3.2	"Q"	Toggle Frame Origin Switch.

	Euclidean transformations  in world  frame can  be done  with
repect to  the world origin or with repect to  the origin of the body
being transformed depending on  the state of  the FRMORG switch.   In
particular, FRMORG affects world  frame rotations: FRMORG true causes
rotation  about  a world  axis thru  the  world origin;  FRMORG false
causes rotation about an axis parallel to a world  axis,  but passing
thru  the body  origin.   The  FRMORG switch  is flipped  by  the "Q"
command. The state  of FRMORG is  indicated by an  asterisked in  the
status display;  the  asterisk is  present when  FRMORG  is true  and
absent when FRMORG is false.

3.3.3	"βA"	Step Axis Counter.

	The three  state switch  named AXECNT  affects dilations  and
reflections.   State-1  indicates dilation  (reflection) only  on the
specified axis. State-2  indicates dilation  (reflection) on the  two
axes not  specified. State-3  indicates dilation (reflection)  on all
three axes. The state of the AXECNT switch is indicated by a digit to
the right  of  the dilation  strength's percent  sign  in the  status
display. AXECNT is cycled forward by the "βA" command.

3.3.4	  "∀"	Enable All Body Motions.
	 "α∀"	Disable Frame  Motion.
	 "β∀"	Disable Vertex Motion.
	 "ε∀"	Disable Parts  Motion.

	A Euclidean transformation applied to  a body, means applying
the tranform  to the vertices, frame and parts  of that body. Each of
these  three  phases  of  body  transformation  can  be  individually
disabled  by the  "∀"  command with  the  appropriate conbination  of
meta-control bits.   With no meta-control bits, the ∀" command resets
all the body disable bits. Transforming a fully diabled  body is a no
operation.
   3.4	THE ITERATION COUNTER.

	"<digit>"	Accumulate Iteration Count.
	"<return>"	Reset Iteration Count to Zero.

	Digits typed  without control  keys are  accumulated into  an
iteration  counter.   The iteration  counter is  cleared by  typing a
carriage  return.    The  iteration  counter  applies   to  Euclidean
transformation and some  kinds of sweeps. The ability  to iterate and
to  do macros  is not  developed because  of the existence  of GEOMED
imbedded  in  LISP  which  provides  better  interactive  programming
facilities than  would be possible  under the present  GEOMED command
scanner. (Inspite of theoretical equivalences, it has been my  design
goal  to   keep   interactive  editing   distinct  from   interactive
programming).

---------------------------------------------------------------------
   3.5	DIRECT EUCLIDEAN COMMANDS.

3.5.1	"U"	Unmove a Body.

	This command applies the inverse of the given body's frame of
reference  to the body  itself.  This  has the effect  of undoing any
translations and rotations that have  been applied to the body;  that
is the body's  frame is brought back to be  coincident with the world
frame  of reference. Thus a  polyhedral body can  be constructed in a
standard orientation; then rotated randomly for  inspection; and then
be brought back to it original orientation for further editing.

3.5.2	"X PLACE <X> <Y> <Z>"

	The location of the body, camera or vertex  in the top of the
stack is placed at the given world coordinates.

3.5.3	"X ORIENT <PAN> <TILT> <S.WING>"

	The orientation  of the given  body or camera  is set  to the
specified values.
4.0  TOPOLOGICAL COMMANDS.

   4.1	EASY CREATIONS.

      4.1.1	"∞"	Instant Cube.
      4.1.2	"α∞"	Instant Torus.
      4.1.3	"X CUBE <DX> <DY> <DZ>"
      4.1.4	"X CYLN <RADIUS> <N-SIDES> <DZ>"
      4.1.5	"X BALL <RADIUS> <M-LONGITUDES> <N-LATITUDES>"

   4.2	COPY,KILL AND DUAL.

      4.2.1	"C"	Copy.
      4.2.2	"K"	Kill.
      4.2.3	"αK"	Edge-Vertex Kill.
      4.2.4	"βD"	Dual.

   4.3	SWEEP COMMANDS.

      4.3.1	"S" 	Sweep
      4.3.2	"αS"	Pyramid.
      4.3.3	"R"	Rotation Solid Completion.
      4.3.4	"X SILOUETTE <ZMIN> <ZMAX>"

   4.4	THE EULER COMMANDS.

      4.4.1	"V"	Make Vertex Body.
      4.4.2	"E"	Make Edge and Vertex.
      4.4.3	"M"	Midpoint an Edge.
      4.4.4	"J"	Join Vertices.
      4.4.5	"G"	Glue Faces.

   4.5	BODY INTERSECTION COMMANDS.

      4.5.1	"α∩"	Body Intersection.
      4.5.2	"α∪"	Body Union.
      4.5.3	"α¬"	Body Subtraction.
      4.5.4	"¬" 	Evert Body Surface Orientation.
      4.5.5	"|"  	Invert Edge Linear Orientation.
      4.5.6	"$"  	Make Convex.
      4.5.7	"α$" 	Edge Slurp.

   4.6	CUT COMMANDS.

	 "X CUT <X> <Y> <Z>"	Cut Bodies, Faces and Edges.
	"αX CUT <X> <Y> <Z>"	Cut Faces and Edges.
	"βX CUT <X> <Y> <Z>"	Cut Edges.
	"εX CUT"		Kill Temporaries (Uncut).

   4.7	PARTS TREE COMMANDS.

      4.7.1	"A"	Attach.
      4.7.2	"D"	Detach.
   4.1	EASY CREATIONS.

4.1.1	"∞" Instant Cube.

	The instant cube command places a command string for making a
particular cube into the teletype buffer. The purpose of this command
is to make an object for demonstation.

4.1.2	"α∞" Instant Torus.

	The instant torus command places a command string for making a
particular torus into the teletype buffer. The purpose of this command
is to make a demonstation object.

4.1.3	"X CUBE <DX> <DY> <DZ>"

	The CUBE command  makes a right rectangular prism  with width
height and  depth as given in the three arguments.   The body node of
the cube is  pushed into the stack,  and the cube  is located at  the
world origin.  The absolute value of  the arguments is taken  so that
the  cube is always solid.  A zero <DZ>  returns a rectangular lamina
rather than a cube.

4.1.4	"X CYLN <RADIUS> <N-SIDES> <DZ>"

	The CYLN  makes a  right prism that  approximates a  circular
cylinder. A zero <DZ>  argument returns a circular lamina rather than
a cylinder. The <N-sides> argument is forced to be at least three.

4.1.5	"X BALL <RADIUS> <M-LONGITUDES> <N-LATITUDES>"

	The BALL  command  makes  a polyhedron  that  approximates  a
sphere. The  <M-Longitudes>  and <N-Latitudes>  are forced  to be  at
least three and two respectively.
   4.2	COPY, KILL AND DUAL.

4.2.1	"C"	Copy.

	Copy whatever  is in  the top  of the  stack in a  reasonible
manner and  push it down. Copy of a bodies  includes all the parts of
that body. Copy of a face, creates a two faced body lamina coincident
with the given face.

4.2.2	"K"	Kill.

	This command takes  the top body,  face,  edge or  vertex and
attempts to delete  it in a reasonable manner. Kill of a body deletes
it and all its parts. Kill of  a face removes the given face and  all
its edges and vertices but one  vertex, which is placed in the center
of  the given  face and  is returned  to the  stack. Kill of  an edge
removes the given  edge and its negative  face, NFACE(E).  Kill  of a
vertex removes the  vertex and all its edges and  faces but one face,
which is returned to the stack. The kill operation is not defined  in
cases which would  leave one sided  faces or dangling  edges; however
the necessary trihedral  restrictions are not imposed so that certain
illegal kills are possible and other illegal kills are  fatal.

4.2.3 "αK" Edge-Vertex Kill.

	The "αK"  kill of an edge  removes the edge and  its negative
vertex,   NVT(E); the  positive vertex,   PVT(E), is  position in the
center of the edge and returned to the stack.

4.2.4	"βD"	Dual.

	The "βD" command makes  the face/vertex dual of a  body; that
is all  the faces become vertices and  all the vertices become faces.
This command  will turn  dodecahedrons into  icosahedrons; (or  jacks
into horny octahedrons) as illustrated below.
   4.3	SWEEP COMMANDS.

4.3.1	 "S" 	Sweep.
	"βS"	Sweep Cylinder, Edges Not Sharp."

	This command  sweeps a face  into either a  sheet or  a solid
depending on the NCNT.  If the NCNT is zero, then SWEEP returns a new
face coincident with the given face and connected to it by  new sweep
edges and rectangular  sweep faces forming a prism. When  the NCNT is
non-zero, only  the first NCNT edges of the argument face's perimeter
are swept into new  faces.  Thus NCNT  new faces are created  and the
argument face is returned  somewhat more complicated than before.

4.3.2	"αS"	Sweep Pyramid.
	"εS"	Sweep Pyramid, Edges Not Sharp.

	Given a face, "αS"  will creat a peak vertex and  place it in
the  center of the  face connected  by an edge  to each of  the faces
vertices. The peak vertex is  returned to the stack. Given a  vertex,
the  pyramid command  forces  all  the faces  of  that  vertex to  be
triangular.

4.3.3	"R"	Rotation Solid Completion.

	After  a  wire  has  been  swept  around, you have a shell of
rotation.  To change a shell into a solid all that remains to be done
is  do  a series of J commands on the leading and lagging vertices of
the shell. The R command, using the NCNT  to  step  around  the  pole
caps, calls the J-command for all the necessary pairs. The sweep face
is taken as an argument and nothing is returned.

4.3.4	"X SILOUETTE <ZMIN> <ZMAX>"

	This  command sweeps  a  silouette lamina  body  into a  cone
between  -<zmin> and  -<zmax> on  the Z-axis of  the now  camera. The
minus Z half space is the one that contains the objects  visible from
the camera;  that is the camera's  principle ray is the  minus Z-axis
ray.
   4.4	THE EULER COMMANDS.

4.4.1	"V"	Make Vertex Body.
	"βV"	Make Body node.

	This command  creates a polyhedron  consisting of  one vertex
and  one face.   The vertex  is placed  at the  world origin.   The V
command takes no arguments and  leaves the new body, face and  vertex
on the  stack with the  vertex on top. The  "βV" command will  make a
naked body nude, that is a body with no faces, edges or vertices.

4.4.2	"E"	Make Edge and Vertex.

	This command creates a new edge and  a  new  vertex  starting
from  an  old  vertex.  The E command requires two arguments, the top
argument is the old vertex and the second argument must be one of the
faces  to  which  the vertex belongs.  The new edge and vertex become
associated with the given face.

4.4.3	"M"	Midpoint an Edge.

	This command takes an edge argument and creats a new edge and
a  new vertex.  The  new mid vertex  is positioned along  the edge in
proportion to the value of DDEL. Type the commands "ε5M" in  order to
make a  midpoint that  is geometrically  in the  middle of  the given
edge.

4.4.4	"J"	Join Vertices.

	This command  creates a  new face and  a new  edge.  The  "J"
command has  two forms.  The general form  of the "J" command expects
two vertices of the same  face to be given  on the top of the  stack,
and it returns in their place a new edge and a new face with the edge
on top.  The wire form of the "J" command applies only to a face that
doesn't have a closed perimeter.  The wire "J"  returns the other end
of the wire in top and leaves the second argument unchanged.

4.4.5	"G"	Glue Faces.

	This command takes two  faces from the top of  the stack. The
faces  should be of opposite  orientation, they should  have the same
number of vertices and the vertices should be nearly  coincidant. The
two faces  are deleted along with  all the edges and  vertices of the
second  one of them. If  there were two bodies  before, then one will
remain; whereas  a body  glued to  itself  forms a  hole (or  handle)
yielding a  polyhedral surface of  genus one greater  than before. In
either case, the glue faces command returns the body of the faces  so
formed.
   4.5	BODY INTERSECTION COMMANDS.

4.5.1	"α∩"	Body Intersection.

	Given two different bodies from the top  of the stack, if the
intersection of  the space enclosed by their  surfaces is not empty a
new polyhedron will be formed  to represent the surface of the  space
of intersection; and the given bodies will be killed.

4.5.2	"α∪"	Body Union.

	Given two different bodies from the top  of the stack, if the
union  of the space  enclosed by  their surfaces is  simply connected
(that is al'e de  Morgan: the intersection  of the space enclosed  by
their surfaces is  not empty); then a new polyhedron  will be created
representing  the surface of the union of  the enclosed spaces of the
given bodies. The given bodies will be killed.

4.5.3	"α¬"	Body Subtraction.

	Subtract the top  of the stack  body from the body  second in
the stack. Where subtraction means union of the evert of the top body
with the second body.

4.5.4	"¬" 	Evert Body Surface Orientation.

	GEOMED polyhedra have  an inside and an  outside irrespective
of enclosing  a finite volume; that  is a thing that  appears to be a
cube can either be a solid in space or a space in a solid.  The EVERT
command turns solids into holes and holes into solids.

4.5.5	"|"  	Invert Edge Linear Orientation.

	Edges  are directed  vectors  with a  negative  vertex and  a
positive vertex. The  "|" command flips the linear orientation of the
edge by swapping the edges vertices, faces and wings.

4.5.6	"$"  	Make Convex.

	This command  may be  applied to a  face or  a body. All  the
faces referred to will be split into triangles.

4.5.7	"α$" 	Edge Slurp.

	This command  will attempt to  remove or darken  the visually
unaesthetic  edges that  arise from  the  "Make Convex"  command. The
edges slurp are the  one with dihedral angle  of almost pi, and  with
wing angles that sum to less than pi at each vertex.
   4.6	CUT COMMANDS.

	 "X CUT <X> <Y> <Z>"	Cut Bodies, Faces and Edges.
	"αX CUT <X> <Y> <Z>"	Cut Faces and Edges.
	"βX CUT <X> <Y> <Z>"	Cut Edges.
	"εX CUT"		Kill Temporaries (Uncut).

	The cut command  argument specifies a cutting plane  in terms
of  a vector from  the world origin;  the direction of  the vector is
normal to  the desired  plane, the  magnitude of  the  vector is  the
distance of the origin from the desired plane.


   4.7	PARTS TREE COMMANDS.

4.7.1	"A"	ATTACH

	This command attachs  the body in the  top of the stack  as a
part to  the body second in the stack. If  the first two entities are
not bodies  then  this command  is a  no  operation. Because  of  the
implementation,  the   parts  structure   is  always  kept   a  tree,
circularities and incest are prevented.

4.7.2	"D"	DETACH

	Detachs a part from its parent; applies to bodies only.
5.0  INPUT/OUTPUT COMMANDS.

	"I"	input B3D file.		"O"	output B3D file.
	"αI"	input CAM file.		"αO"	output CAM file.
	"βI"	input CRE film.		"βO"	output V2D file.
	"εI"	input GEM file.		"εO"	output GEM file.

	"βZ"	take commands from GEO file.
	"P"	output PLT file of current III buffer.

   5.1	I/O COMMANDS.

	The "I" and "O" are the commands  for input and output. There
are two  file formats for polyhedra named B3D  and GEM. The plain "O"
command will output a  body (and all its parts)  from the top of  the
stack into a B3D  file. The plain "I" command will  input a body (and
all  its parts) from  a B3D file and  will push it  on the stack. The
"αI" and "αO" input and output CAM files to and from  the node of the
"now"  camera. The  "βI"  inputs a  CRE  film and  places  a film  of
perceived CRE images on the "now"-camera's node. The "βO" command  is
for outputing a  V2D file (vectors 2-D)  for the sake of  MKVID (make
video)  which does  the scan line  conversion for  synthesizing video
images. The  "εI"  and  "εO" commands  read  and write  more  of  the
contents of each body, face,  edge  and vertex for the sake of GEOMES
(SAIL)  and GEOMEL (LISP) users.  Specifically  words 0 and 8 of each
node is included in the GEM format.

   5.2	PLOT FILE HARDCOPY; PLTVEC AND XAP.

	The are two online hardcopy plotting devices: the XGP and the
Cal Comp plotter. A  plot file (which is a III buffer) can be plotted
on the Cal Comp by running the program PLTVEC. PLTVEC first  asks for
point vector default: REGULAR, DASHED  or VECTOR; type the letter "R"
or  just type a  carriage return. Next  PLTVEC ask for  a scale size;
type a real number between 0.1 and 2.5; a scale 1.0 will yield a plot
approximately  the size of  the physical  III screen,  10 inchs  on a
side. Next PLTVEC asks for the  plot file name, after which the  plot
begins. When the plot is completed, the question "move pen" appears
and can be answered with the letters "L" for left, "R" for right,
"U" for up and "D" for down.
	
   5.3	VIDEO IMAGES; MKVID AND CRE.
6.0  EDITOR CONTROL COMMANDS.

   6.1	PROGRAM CONTROL.

      6.1.1	"εE"	Exit GEOMED.
      6.1.2	"α#"	Enter DDT.

   6.2	STACK COMMANDS.

      6.2.1.	 "↔"	Swap First and Second Elements of Stack.
		"α↔"	Swap First and Third  Elements of Stack.
		"β↔"	Swap First and  Last  Elements of Stack.
		"ε↔"	Swap Second and Third Elements of Stack.
      6.2.2	"↓"	Duplicate Push Stack Down.
		"↑"	Discard Pop Stack.
      6.2.3	"α↓"	Rotate the Stack Down.
		"α↑"	Rotate the Stack Up.
      6.2.4	"⊗"	Push Universe Node into the Stack.
		"αC"	Push the Now Camera into the Stack.

   6.3	BODY NAMING AND RETRIEVING.

      6.3.1	"N"	Name Body.
      6.3.2	"B"	Body Get.
      6.3.3	"αB"	Body Retrieval by Name or by Numeral.

   6.4	FACE AND VERTEX PERIMETER TRAVELING.

		"."	Fetch Counter Clockwise.
		","	Fetch Clockwise.
		"+"	Fetch Other.
		"αV<n>"	Fetch Nth Vertex of a Body.

   6.5  LINK FOLLOWING COMMANDS.

		"<" NFACE Link.		">" PFACE Link.
		"≤" NED Link.		"≥" PED Link.
		"∨" NVT Link.		"∧" PVT Link.
		"∩" DAD Link.		"∪" SON Link.
		"⊂" BRO Link.		"⊃" SIS Link.
		"←" ALT Link.		"→" ALT2 Link.
		"," CW  Link.		"." CCW Link.

   6.1	PROGRAM CONTROL.

6.1.1	"εE"	Exit GEOMED.

	Exit the GEOMED  editor. Returns control to monitor  level or
to  user program level. When  embedded, GEOMED returns  the entity at
the top of its stack to its caller as its value.

6.1.2	"α#"	Enter DDT.

	Enters DDT if  it exists.   The SYS versions of  GEOMED never
have  DDT; the  versions  GEOMED.DMP[GEM,HE] and  G.DMP[GEM,BGB] will
usually have DDT (which actually a Swinehart RAID); and a GEOMES core
image has DDT depending  on how the compile and load  was done. A DDT
"αP" command will continue execution in the GEOMED listen loop.
 
---------------------------------------------------------------------
  6.2  STACK COMMANDS.

6.2.1	 "↔"	Swap First and Second Elements of the Stack.
	"α↔"	Swap First and  Third Elements of the Stack.
	"β↔"	Swap First and  Last  Elements of the Stack.
	"ε↔"	Swap Second and Third Elements of the Stack.

	GEOMED commands  take their  arguments from  and leave  their
results in a push  down stack of bodies,  faces,  edges and vertices.
The contents of the stack are displayed on the left hand side  of the
III screen. The swap commands  exchange the indicated elements of the
stack  if  they  exist.  The stack  can  hold  one  hundred entities,
although only the top thirty elements will be displayed.

6.2.2	"↓"	Duplicate Push Stack Down.
	"↑"	Discard Pop Stack.

	The "↓" command push the stack down and places a duplicate of
the previous top of stack into the top of stack. The "↑" command pops
the stack discarding the top element.

6.2.3	"α↓"	Rotate the Stack Down.
	"α↑"	Rotate the Stack Up.

	The rotate stack commands preserve the  number of elements in
the stack. Rotate  down pushs the stack and moves the last element to
the top. The rotate  up pop the stack and  moves the previous top  to
the bottom.

6.2.4	"⊗"	Push Universe Node into the Stack.
	"αC"	Push the now camera into the Stack.

	These two commands require no arguments,  but merely push the
Universe  node or  the current  camera into the  stack, so  that node
linking can be started. The command sequence "⊗∪" will push the first
world node into stack.
   6.3  BODY NAMING AND RETRIEVING.

6.3.1	"N"	Name Body.

	This command accepts a  string of up to ten  characters typed
as a name for the body in the top of the stack; any characters can be
used in the name.

6.3.2	"B"	Body Get.

	This command will  replace the edge,  face, or vertex  in the
top of the stack with the body to which it belongs.

6.3.3	"αB"	Body Retrieval by Name or by Numeral.

	Each body has a numeral corresponding to  its position in its
world's body ring. The "αB" command will accept a name or numeral and
will push the indicated body into the stack.

---------------------------------------------------------------------
   6.4	FACE AND VERTEX PERIMETER TRAVELING.

	"."	Fetch Next Edge Counter Clockwise about Face (Vertex).
	","	Fetch Next Edge Clockwise about Face (Vertex).
	"+"	Fetch Other Face (Vertex) of the Edge.
	"αV<n>"	Fetch Nth Vertex of a Body.
	"≥"	Fetch First Edge of a Face or Vertex.

	When the top two positions of the stack contain an edge and a
face  (or an  edge and a  vertex) that  are connected; then  both are
intensified and face (vertex)  perimeter traveling is possible  using
the "," or  the "." commands to  obtain the next edge  about the face
(vertex)  from  the given  edge, going  in  the clockwise  or counter
clockwise  direction  (as seen  from  the  exterior  surface  of  the
polyhedron). It  is also possible while perimeter  traveling to cross
to the other  face (vertex) of  the given  edge by means  of the  "+"
command. Remember that  whenever there is  a face, edge or  vertex in
the top of the stack, the body to which it belongs can be obtained by
using the "B" command.  Mastering these commands alleviates  the urge
to have  a light pen; or  to take prolonged trips  around edge rings.
The "αV<n>" retrieves the Nth vertex around the body ring of the body
in the top of the  stack; the vertex numerals are displayed  when the
"αL" switch is toggled on.  Trivia experts will be happy to know that
"α." and "α," fetch the next vertex (face),  ccw and cw respectively,
from the current edge with respect to the current face (vertex).
   6.5  LINK FOLLOWING COMMANDS.

	The GEOMED data structure consists of twelve word nodes which
contain  links  and  data.  The  following  command characters  fetch
particular links of the entity in the top of the stack:

	WORD1:	"<" NFACE Link.		">" PFACE Link.
	WORD2:	"≤" NED Link.		"≥" PED Link.
	WORD3:	"∨" NVT Link.		"∧" PVT Link.
	WORD4:	"∩" DAD Link.		"∪" SON Link.
	WORD5:	"⊂" BRO Link.		"⊃" SIS Link.
	WORD6:	"←" ALT Link.		"→" ALT2 Link.
	WORD7:	"," CW  Link.		"." CCW Link.

	The root of the  data structure is the UNIVERSE  node,  which
is unique,   and which can be pushed into  the stack by executing the
"⊗" command.  Directly accessible  from the  UNIVERSE  node, are  the
display ring and the world ring:

	"∩" of the UNIVERSE	returns the "now" WORLD.
	"∪" of the UNIVERSE	returns the "first" WORLD.
	"." of the UNIVERSE	returns the "now" display.
	"," of the UNIVERSE	returns the "first" display.

A display  is  not a  node,  but is  rather a  ring  of windows.  The
refresh subroutine GEODPY,  refreshs the windows of the "now" display
ring.

	"⊂" and "⊃" of a WINDOW travels the Window Ring of a display.
   	"." and "," of a WINDOW travels the Display Ring.

Each world has  at least one  camera, one sun,  and a ring  of bodies
(which is initially empty).

	"←" of a WORLD		returns the "first" SUN.
	"∩" of a WORLD		returns the "now" CAMERA.
	"∪" of a WORLD		returns the "first" CAMERA.
	"." and "," of a WORLD travels the World's Body Ring.
	"⊂" and "⊃" of a WORLD travels the World Ring of the UNIVERSE.

Each camera points back  to the world to which it  belongs "∪"; and
belongs  to  that   world's  camera  ring , "⊂"  and  "⊃" ;  and  has
potentially two rings  of images: the synthetic  image ring, ".",  of
images from  the hidden  line eliminator, OCCULT;  and  the perceived
image ring, ",", of images from the video edge finder, CRE.

	A  polyhedral  surface  is  composed   of  faces,  edges  and
vertices.  Each particular face, edge,  or vertex belongs  to one and
only one body; and in turn each  body has a ring of faces, a ring  of
edges and a ring of vertices:

	"<" and ">" of a body travels the Face Ring of that body.
	"≤" and "≥" of a body travels the Edge Ring of that body.
	"∨" and "∧" of a body travels the Vertex Ring of that body.

	When the "αL" switch is toggled ON, a numeral is displayed at
each vertex of the body in the top of the stack. The N'th vertex of a
body can  be  brought into  the stack  by  typing "αV<n>".    Besides
belonging to rings; vertices and  faces have one additional link, the
PED or first edge link which points to one of the edges of the vertex
or face. The PED of a  vertex or face in the top of the  stack can be
obtained by typing "≥".

	Besides belonging  to an edge ring, each  edges points at its
two faces, its two vertices and its four neighboring edges in each of
its two faces; these last four pointers are  the so called "wings" of
the edge and are used to travel the perimeters of faces and vertices.
Thus with an edge in the top of the stack, either of its two faces or
two vertices  can be obtained  by typing  one of the  four characters
"<>∨∧" respectively.

	The  arcane link positions in words -3,   -2 and -1 of a node
can be  retrieved by  the control "<>≤≥∨∧"  respectively; while  meta
"<>≤≥∨∧" will retrieve from words  6, 7 and 8. No important links are
stored in the arcane positions.
7.0  DISPLAY CONTROL COMMANDS.

   7.1	STATUS DISPLAY.

      7.1.1	 "≡"	Status Display Toggle.
		"α≡"	Toggle Now Window's Darken Bit.
		 "#"	Clear the page printer.
      7.1.2	 "∂"	Datum Display Toggle.
		"α∂"	Datum Format  Toggle.
      7.1.3	 "L" 	Toggle FEV Lights Switch.
		"αL"	Toggle Body Lights Switch.
		"βL"	Toggle Frame Lights Switch.

   7.2	HELP DISPLAY.
		 "?"	Information Prefix.
		 "H" 	Help.
		"αH"	Unhelp.

   7.3	DISPLAY MODES.

		"space"	Display Refresh, GEODPY.
		 "ALT"	GEODPY with hidden lines eliminated.
		"αALT"	GEODPY with back side faces eliminated.
		"βALT"	GEODPY everything visible.
		"εALT"	GEODPY with OCCULT diagonostics.
		 "_"	Sticky Alt.
		"α_"	Sticky αALT.
		"β_"	Sticky βALT.
		"ε_"	Sticky εALT.

   7.4	EDGE DISPLAY BITS.

      7.4.1 	"αD"	Darken.
		"εD" Undarken.
      7.4.2	"X NSHARP"
		"X GOURAUD"

   7.5 	FACE COLORING.

		"X COLOR 00RED 00GRN 00BLU 00ALB"

   7.6	CAMERA COMMANDS.

		"αC"	Push now camera into the stack.
		"βC" 	Make new camera.
		"β}"	Step now camera forwards.
		"β{"	Step now camera backwards.
		"αF"	Set Camera's Focal Plane distance.

   7.7	WORLDS AND WINDOWS.

		 "W" 		Make Window in Now Display Ring.
		"αW"		Make Window in New Display Ring.
		"βW"		Make New World.
		 "{" and "}"	Step Now Display.
		"α{" and "α}"	Step Now World.

   7.8	IMAGE RINGS.

		"αT" 		Make a Simulated Image Body.
		 "←" and  "→" 	Step Perceived CRE Image Ring.
		"α←" and "α→" 	Step Predicted OCCULT Image Ring.
   7.1  STATUS DISPLAY.

	The execution of  nearly every GEOMED command is  followed by
the  two display  refresh routines called  GEODPY and  STADPY. STADPY
refreshs the  stack  display, the  editor  status display,  the  node
contents  display,  and the  top  of  stack brighteners  called  "the
lights" which are governed by the "L" command. GEODPY scans the "now"
display ring of the universe node, and refreshs a  piece of glass for
each window having a camera.


7.1.1	 "≡"	Status Display Toggle.
	"α≡"	Toggle Now Window's Darken Bit.
	 "#"	Clear the page printer.

	The STADPY, status  display is turned  on and off by  the "≡"
command.  The "α≡" command  will turn the  window border  on and off,
(that  rectangle). The  "#"  command.  types  four  form  feeds,  for
clearing the page printer of visible characters.

7.1.2	 "∂"	Datum Display Toggle.
	"α∂"	Datum Format  Toggle.

	The "∂" command causes the contents of the node at the top of
the  stack to  be displayed  in the  lower right  hand corner  of the
screen. Frame, body  and camera  nodes have a  special display  which
indicates their location and  orientation; the special display format
can  be toggled  on  and off  by means  of the  "α∂" command.  In the
regular format node display, the appropriate  link following commands
for the different words of the node are indicated.

7.1.3	 "L" 	Toggle FEV Lights Switch.
	"αL"	Toggle Body Lights Switch.
	"βL"	Toggle Frame Lights Switch.
	
	When the "L" switch  is on; faces, edges and  vertices in the
top  of  the stack  are  intensified.  When the  "αL"  switch  is on,
numerals are displayed for all the vertices of the body in the top of
the stack. The vertex numerals can be used for obtaining a particular
vertex  using the "εV"  command. When the  "βL" switch is  on,  three
vectors are  displayed indicating the  direction of  the axes of  the
current frame of reference; the vectors are labeled respectively by a
letter "X", "Y", or  "Z" followed by a  number between -1.0 and  +1.0
indicating whether  the vector is  going away  or coming towards  the
current camera.
   7.2	HELP DISPLAY.

"?"	Information Prefix.
"H" 	Help.
"αH"	Unhelp.

	Typing a  question mark  "?" followed  by any character  will
type  a  one line  reminder  of  what commands  are  invoked  by that
character. The "H" command  allows the user  to read this document  a
page at a  time while using GEOMED. Help starts  by displaying page-4
and  waits for other  desired page numbers; typing  a carraige return
will exit  the help  with  the display  persisting, control  carraige
return will exit the help  with the display cleared. The "αH" command
clears the HELP display glass.

---------------------------------------------------------------------
   7.3	DISPLAY MODES.

	"space"	Display Refresh, GEODPY.
	 "ALT"	GEODPY with hidden lines eliminated.
	"αALT"	GEODPY with back side faces eliminated.
	"βALT"	GEODPY everything visible.
	"εALT"	GEODPY with OCCULT diagonostics.
	 "_"	Sticky Alt.
	"α_"	Sticky αALT.
	"β_"	Sticky βALT.
	"ε_"	Sticky εALT.

	There  are two  basic  display modes:  with  and without  the
hidden  lines eliminated. Initially the  display refresh displays all
the lines that are visible from the simulated cameras of  the windows
of the  now display ring.  The "ALT" commands  do one refresh  in the
mode  selected by the  control bits. An easy  hidden line elimination
takes less than a second; the hardest take up  to thirty seconds. The
underbar  commands,  "_",  make  the  selected display  refresh  mode
sticky, all refreshs are done in  that mode until the next  underbar.
The spacebar command redoes the last refresh.
   7.4	EDGE DISPLAY BITS.

7.4.1 	"αD"	Darken.
	"εD" Undarken.

	Given a body  or an edge in the  top of the stack;  these two
commands  set  or  reset the  darken  bit  all  the specified  edges.
Darkened edges will not be intensified by the display refresh.

7.4.2	"X NSHARP"
	"X GOURAUD"

	Given a body  or an edge in the  top of the stack;  these two
extended scanner commands, set the "not sharp" and the "Gouraud" bits
respectively all the edges of the body or of the given edge.  The two
bits  specify different  kinds  of intensity  smoothing  to the  "βO"
command.  And the  "not sharp"  bit causes  not sharp and  not folded
edges to be not visible after an OCCULT hidden  line elimination; all
of which yields line drawings with a rounded appearance.

---------------------------------------------------------------------
   7.5 	FACE COLORING.

	"X COLOR <n>RED <n>GRN <n>BLU <n>ALB"

	The coloring command sets the bytes of words 4 and 5 of
all the implied given faces. The <n> arguments represent percentage
values between 0 and 100; the argument must be suffixed by a letter
---------------------------------------------------------------------
   7.6	CAMERA COMMANDS.

	"αC"	Push now camera into the stack.
	"βC" 	Make new camera.
	"β}"	Step now camera forwards.
	"β{"	Step now camera backwards.
	"αF"	Set Camera's Focal Plane distance.

	The "αF<distance>" command will set the now camera's focal
plane distance to the given value, the distance is assumed to be in
units of millimeters. The initial focal plane distance is 12.5 mm.
---------------------------------------------------------------------
   7.7	WORLDS AND WINDOWS.

	 "W" 		Make Window in Now Display Ring.
	"αW"		Make Window in New Display Ring.
	"βW"		Make New World.
	 "{" and "}"	Step Now Display.
	"α{" and "α}"	Step Now World.
   7.8	IMAGE RINGS.

	"αT" 		Make a Simulated Image Body.
	 "←" and  "→" 	Step Perceived CRE Image Ring.
	"α←" and "α→" 	Step Predicted OCCULT Image Ring.

8.0  FILE FORMATS.

CAMERA FILE FORMAT.

A GEOMED camera file consists of exactly twelve words:
---------------------------------------------------------------------
CAMERA FILE

	WORD	NAME	CONTENTS

	0	CX	Camera lens center location
	1	CY	...in world coordinates
	2	CZ	...in centimeters

	3	PAN	Camera principle ray orientation
	4	TILT	...with respect to world coordinates
	5	SWING	...in radians

	6	PDX	Width  of a pixel in microns.
	7	PDY	Height of a pixel in microns.
	8	PDZ	Depth  of a pixel in microns.

	9	FOCAL	Focal plane distance in millimeters.
       10	LDX	Width of image raster in pixels.
       11	LDY	Height of image raster in pixels.

---------------------------------------------------------------------
CONVERSION FROM CAMERA FRAME TO P.T.S.

	TILT  ←  ACOS(KX);
	TMP   ←  1/SIN(TILT);
	PAN   ←  ATAN2(KX*TMP,-KY*TMP);
	SWING ←  ACOS (JZ*TMP);

CONVERSION FROM P.T.S. TO CAMERA FRAME.

	FRAME ← MKROT1(PAN,TILT,SWING);
	
---------------------------------------------------------------------
B3D FILE FORMAT

	A body 3-D file represents a body and  all its parts; the B3D
files  are read (written)  by a  recursive routine that  first inputs
(outputs) a body header then all the faces, edges and vertices of the
bodies surface and then recurses for the sub-parts of the body.
---------------------------------------------------------------------
	BODY HEADER - 18 WORDS.

		0	Parts CounT
		1	Face  Count
		2	Edge  Count
		3	Vertex Count

	     4  5	PNAME

	  6  7  8	XWC YWC ZWC
	  9 10 11 	IX IY IZ
	 12 13 14 	JX JY JZ
	 15 16 17 	KX KY KZ

	FACES - 2 WORDS EACH.

		BYTE(9)RED,GRN,BLU,ALB	;REFLECTIVITIES.
		BYTE(6)R,G,B,W,M,N	;LUMINOUSITIES.

	EDGES - 4 WORDS EACH.

		XWD NFACE,PFACE
		XWD NVT,PVT
		XWD NCW,PCW
		XWD NCCW,PCCW

	VERTICES - 3 WORDS EACH.

		XWC
		YWC
		ZWC
GEM FILE FORMAT
---------------------------------------------------------------------
	BODY HEADER - 20 WORDS.

		0	Parts CounT
		1	Face  Count
		2	Edge  Count
		3	Vertex Count

	     4  5	PNAME

			TYPE BITS - MEMORY[BODY+0]
			USER WORD - MEMORY[BODY+8]

	  6  7  8	XWC YWC ZWC
	  9 10 11 	IX IY IZ
	 12 13 14 	JX JY JZ
	 15 16 17 	KX KY KZ

	FACES - 2 WORDS EACH.

		BYTE(9)RED,GRN,BLU,ALB	;REFLECTIVITIES.
		BYTE(6)R,G,B,W,M,N	;LUMINOUSITIES.
		TYPE BITS - MEMORY[FACE+0]
		USER WORD - MEMORY[FACE+8]

	EDGES - 4 WORDS EACH.

		XWD NFACE,PFACE
		XWD NVT,PVT
		XWD NCW,PCW
		XWD NCCW,PCCW
		TYPE BITS - MEMORY[EDGE+0]
		USER WORD - MEMORY[EDGE+8]

	VERTICES - 3 WORDS EACH.

		XWC
		YWC
		ZWC
		TYPE BITS - MEMORY[EDGE+0]
		USER WORD - MEMORY[EDGE+8]
PLT FILE FORMAT

V2D FILE FORMAT

GEO FILE FORMAT
9.0  COMMAND SUMMARY BY LEXICAL ORDER.

000	NULL	No operation.
001	 ↓	Push stack down.
	α↓	Rotate stack down.
002	 α	Control key prefix.
003	 β	Meta key prefix.
004	 ∧	PVT, Positive vertex link.
005	 ¬	Evert Body.
	α¬	Body Subtraction.
006	 ε	Meta-Control keys prefix.
007	 π	Set rotation strength, RDEL.
010	 λ	Set translation strength, TDEL.
011	TAB	Comment prefix character.
012	LF	No operation.
013	VT	No operation.
014	FF	No operation.
015	CR	Reset iteration count.
016	 ∞	Instant cube.
	α∞	Instant torus.
	β∞	Crosseyed stereo.
017	 ∂	Datum display Toggle.
	α∂	Datum display format Toggle.
020	 ⊂	BRO, parts tree link.
021	 ⊃	SIS, parts tree link.
022	 ∩	DAD, parts tree link.
	α∩	Body Intersection.
023	 ∪	SON, parts tree link.
	α∪	Body Union.
024	 ∀	Enable all body motions.
	α∀	Disable frame  motion.
	β∀	Disable vertex motion.
	ε∀	Disable parts  motion.
025	 ∃	No operation.
026	 ⊗	Push universe node into stack.
027	 ↔	Swap stack elements 1 and 2.
	α↔	Swap stack elements 1 and 3.
	β↔	Swap stack elements 1 and last.
	ε↔	Swap stack elements 2 and 3.

030	 _	Sticky  ALT display refresh.
	α_	Sticky αALT display refresh.
	β_	Sticky βALT display refresh.
	ε_	Sticky εALT display refresh.
031	 →	ALT2, link fetch.
032	 ~	No operation.
033	 ≠	No operation.
034	 ≤	NED, link fetch.
035	 ≥	PED, link fetch.
036	 ≡	Toggle status display enable.
	α≡	Toggle window border display enable.
037	 ∨	NVT, link fetch.
040	SPACE	Display refresh.
041	 !	Set translation default.
042	 "	No operation.
043	 #	Clear page printer.
	α#	Enter DDT.
044	 $	Make convex.
	α$	Edge slurp.
045	 %	Set DDEL, dilation strength.
046	 &	No operation.
047	 '	No operation.
050	 (	Euclidean transformation minus Y.
051	 )	Euclidean transformation plus  Y.
052	 *	Euclidean transformation plus  Z.
053	 +	Fetch other face or vertex.
054	 ,	Fetch clockwise.
055	 -	Euclidean transformation minus Z.
056	 .	Fetch counter clockwise.
057	 /	Halve strength of transformation.


060-071		DIGITS 0 THRU 9
072	 :	Euclidean transformation plus X.
073	 ;	Euclidean transformation minus X.
074	 <	
075	 =	No operation.
076	 >
077	 ?	Information prefix.
100	 @	Set rotation default.

101	 A	Attach.
	βA	Cycle Axis count.
102	 B	Body of a face, edge or vertex.
	αB	Retrieve body by numeral or by name.
103	 C	Copy.
	αC	Push now camera into the stack.
104	 D	Detach.
	αD	Darken.
	εD	Undarken.
105	 E	Make edge and vertex.
	εE	Exit GEOMED.
106	 F	Step frame selector forwards.
	αF	Accept focal plane distance.
	βF	Step frame selector backwards.
107	 G	Glue face-face.
110	 H	Help display.
111	 I	Input B3D.
	αI	Input CAM.
	βI	Input CRE.
	εI	Input GEM.
112	 J	Join vertex-vertex.
113	 K	Kill entity.
	αK	Kill edge and vertex.
114	 L	Face, edge, vertex lights toggle.
	αL	Body lights toggle.
	βL	Frame of reference lights toggle.
115	 M	Midpoint and edge.
116	 N	Name a body.
117	 O	Output B3D.
	αO	Output CAM.
	βO	Output V2D.
	εO	Output GEM.

120	 P	Plot file output.
121	 Q	Toggle frame origin switch.
122	 R	Rotation completion.
123	 S	Sweep cylinder.
	αS	Sweep pyramid.
	βS	Sweep cylinder edges not sharp.
	εS	Sweep pyramid  edges not sharp.
124	αT	Take a simulated picture.
125	 U	Unmove a body.
126	 V	Make vertex body.
	αV	Retrieve Nth vertex of a body.
	βV	Make body node.
127	 W	Make window in now display ring.
	αW	Make window in a new display ring.
	βW	Make new world at end of world ring.
130	 X	Extended command scanner:
	PLACE <x> <y> <z>
	ORIENT <pan> <tilt> <swing>
	CUBIC <X width> <Y height> <Z depth>
	BALL  <radius> <M longitudes> <N latitudes>
	CYLN  <radius> <N sides> <Z length>
	CUT <x> <y> <z>
	COLOR <n>RED <n>BLU <n>GRN <n>ALBEDO
	NSHARP
	SCROLL
131	 Y	No operation.
132	βZ	Read commands from GEO text file.
133	 [	No operation.
134	 \	Double strength of transformation.
135	 ]	No operation.
136	 ↑	Pop stack.
	α↑	Rotate stack upwards.
137	 ←	ALT link fetch.
	α←	Step thru simulated image ring of now camera.
140	 `	No operation.
141 THRU 172	Lower case letters same as upper case.
173	 {	Step now display backwards.
	α{	Step now  world  backwards.
	β{	Step now camera  backwards.
174	 |	Invert edge linear orientation.
175	 ALT	Display refresh with hidden lines eliminated.
	αALT	Display refresh with bask side faces eliminated.
	βALT	Display refresh with everything visible.
	εALT	Display refresh with OCCULT diagonostics.
176	 }	Step now display forwards.
	α}	Step now  world  forwards.
	β}	Step now camera  forwards.
177	RUBOUT	No operation.